package com.dridco.maxisarno;

import java.util.LinkedList;
import java.util.List;

public class Grafo {

	private int[][] matrizIncidencia;
	private List<Nodo> nodos;

	public Grafo() {
		nodos = new LinkedList<Nodo>();
	}

	public Grafo(List<Nodo> misNodos) {
		nodos = misNodos;

		matrizIncidencia = new int[nodos.size()][nodos.size()];

		for (int i = 0; i < nodos.size(); i++) {
			for (int j = 0; j < nodos.size(); j++) {
				matrizIncidencia[i][j] = 0;
			}
		}
	}

	public Grafo(Grafo miGrafo) {
		this.matrizIncidencia = miGrafo.matrizIncidencia;
		this.nodos = miGrafo.getNodos();
	}

	public List<Nodo> getNodos() {
		return nodos;
	}

	/**
	 * 
	 * @param origen
	 * @param destino
	 * @return distancia origen-destino, si no estan conectados devuelve 0(cero)
	 */
	public int getDistanciaEntreNodos(Nodo origen, Nodo destino) {
		int indexOrigen = nodos.indexOf(origen);
		int indexDestino = nodos.indexOf(destino);

		return matrizIncidencia[indexOrigen][indexDestino];
	}

	/**
	 * 
	 * @param origen
	 * @param destino
	 * @return TRUE si hay un camino que los conecte. FALSE si no lo hay
	 */
	public boolean sonAdyacentes(Nodo origen, Nodo destino) {
		return this.getDistanciaEntreNodos(origen, destino) > 0;
	}

	public void setDistanciaEntreNodos(Nodo origen, Nodo destino, int distancia) {
		int indexOrigen = nodos.indexOf(origen);
		int indexDestino = nodos.indexOf(destino);

		matrizIncidencia[indexOrigen][indexDestino] = distancia;
	}
}
